'''
参数：定义函数时的参数叫形参，调用函数时的参数叫实参
函数的参数类型：
1）位置参数：调用函数时的实参和形参，个数，顺序，类型必须一致
2）默认参数：参数可以设置默认值，一般放在参数的最后面
3）可变参数：参数为0-多个  print()  max() min()
4）关键词参数：字典参数
'''

def print_stu_info(name,age,city="北京",sex="男"):
    print("姓名：%s,年龄%d,所在城市%s,性别：%s" % (name,age,city,sex))

# 调用时，有默认值的参数，可以不给实参
print_stu_info("tom",23,"北京","男")
print_stu_info("tom",23,"北京")
print_stu_info("tom",23)

a = ["jack",45,"上海"]
print_stu_info(*a) # 将列表中的元素进行解包，传递给参数

b = ["广州",34,"lucy"]
city,age,name = b # 将b列表中的数据解包给三个变量
print_stu_info(name,age,city)

# 多参
"""
*参数名：传递的是0-多个参数，将传递的多参数据，打包成一个元组处理
**参数名：传递的是0-多个键值对参数,将传递传递的参数，打包成一个字典处理
面试：*args 和 **keys的区别

形参是（*args,**keys）可以匹配所有参数
def test(*args,**keys)
test()
test(3,4,67,9)
test(4,5,6,name = 'tom')
"""
def getnums(num1,*num2,**num3):
    print(f"num1={num1},num2={num2},num3={num3}")

getnums(1,5,6,7)
getnums(2,5,6,7,name="tom",age=23,height=178.98)

def add(num:int,num2:str):
    # print(f"{num}+3")
    print(num+3)
    print(num2+"abc")

add(8,"tom")
add("8","tom")


